package Demo04;

import java.util.ArrayList;

/**
 * @ClassName CycMove
 * @Description 上下文关键字：抽象数据类型/面程对象风格 --循环移动类
 * 对输入类中的initStr集合中的数据进行循环移动
 * @Author 李明忠
 * @Version 1.0
 */
@SuppressWarnings("all")
public class CycMove {
    //存放循环移动后的数据
    private ArrayList<String> moveStr;

    /********************构造函数***********************/
    //用于其他类调用
    public CycMove() {
    }

    public CycMove(ArrayList<String> moveStr) {
        this.moveStr = moveStr;
    }
    /******************** end ************************/

    /**
     * 使用接收参数防止创建其他类出现该类属性为空
     * @param initStr
     */
    public void cycMoveStr(ArrayList<String> initStr){

        //怎么样来实现循环移动？
        /**
         * 现在集合中每一个元素都是一个字符串
         * 1.我先取出字符串
         * 2.将字符串以空格切割成为字符数组
         * 3.将每一个字符数组进行循环移动
         * 4.最后将循环移动后的字符串存入新 的集合moveStr
         */
        //创建moveStr集合用于存放处理后的数据
        moveStr = new ArrayList<>();

        for (int i = 0; i < initStr.size(); i++) {
            //先取出字符串 将字符串以空格切割成为字符数组
            //initStr.get(i).split(" ")解释：
            //initStr.get(i)通过索引i获取集合的元素
            //initStr.get(i).split(" ")将该元素以空格切割（返回的的是字符串数组）
            String[] str = initStr.get(i).split(" ");

            /*****************循环移动算法***************/
            //对str中没一个元素进行循环移动
            for (int j = 0; j < str.length; j++) {
                //创建一个中间数组用于暂时存放循环移动后的数据
                //StringBuffer好处是你不用考虑开辟多大而且他有追加函数
                StringBuffer temp = new StringBuffer();
                for (int k = j; k < str.length; k++) {
                    //k控制插入节点
                    temp.append(str[k]).append(" ");
                }
                for (int k = 0; k < j; k++) {
                    temp.append(str[k]).append(" ");
                }
                //最后将这个StringBuffer temp.toString()转为字符串存入到moveStr集合
                moveStr.add(temp.toString());
            }
            /****************************************/
        }
    }
    /*******************get和set函数*******************/
    public ArrayList<String> getMoveStr() {
        return moveStr;
    }

    public void setMoveStr(ArrayList<String> moveStr) {
        this.moveStr = moveStr;
    }
/*******************  end  ***********************/
}
